Recette n 24 Traiter les informations renvoyes par Zbar pour la reconnaissance des symboles
Page 67

import com.example.cookbook_qrcode.CameraPreview;

public class MainActivity extends Activity
{
   private Camera mCamera; 
   private CameraPreview mPreview; 
   private Handler autoFocusHandler; 

   TextView scanText;
   Button scanButton;

   ImageScanner scanner; 

   private boolean barcodeScanned = false; 
   private boolean previewing = true; 

   static
   {
      System.loadLibrary("iconv");
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }

   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      autoFocusHandler = new Handler();
      mCamera = getCameraInstance();

      scanner = new ImageScanner();
      scanner.setConfig(0, Config.X_DENSITY, 3);
      scanner.setConfig(0, Config.Y_DENSITY, 3);

      mPreview = new CameraPreview(this, mCamera, previewCb, autoFocusCB);
      FrameLayout preview = (FrameLayout)findViewById(R.id.cameraPreview);
      preview.addView(mPreview);

      scanText = (TextView)findViewById(R.id.scanText);
      scanButton = (Button)findViewById(R.id.ScanButton);

      scanButton.setOnClickListener(new OnClickListener()
         {
            public void onClick(View v)
            {
               if (barcodeScanned)
               {
                  barcodeScanned = false;
                  scanText.setText("Scan en cours...");
                  mCamera.setPreviewCallback(previewCb);
                  mCamera.startPreview();
                  previewing = true;
                  mCamera.autoFocus(autoFocusCB);
               }
            }
         }
      );
   }

   public void onPause()
   {
      super.onPause();
      releaseCamera();
   }

   public static Camera getCameraInstance()
   {
      Camera cam = null;
      try
      {
         cam = Camera.open();
      }
      catch (Exception ex)
      {
         // Camra dj instancie
      }
      return cam;
   }


   private void releaseCamera()
   {
      if (mCamera != null)
      {
         previewing = false;
         mCamera.setPreviewCallback(null);
         mCamera.release();
         mCamera = null;
      }
   }


   private Runnable doAutoFocus = new Runnable()
   {
      public void run()
      {
         if (previewing)
            mCamera.autoFocus(autoFocusCB);
      }
   };

   PreviewCallback previewCb = new PreviewCallback()
   {
      public void onPreviewFrame(byte[] data, Camera camera)
      {
         Camera.Parameters parameters = camera.getParameters();
         Size size = parameters.getPreviewSize();

         Image imgBarcode = new Image(size.width, size.height, "Y800");
         imgBarcode.setData(data);

         int result = scanner.scanImage(imgBarcode);

         if (result != 0)
        {
            previewing = false;
            mCamera.setPreviewCallback(null);
            mCamera.stopPreview();

            // Conteneur avec les rsultats du scan
            SymbolSet symbols = scanner.getResults();
            
            for (Symbol symbol : symbols)
            {
               scanText.setText("Rsultat : " + symbol.getData());
               barcodeScanned = true;
            }
         }
      }
   };

   AutoFocusCallback autoFocusCB = new AutoFocusCallback()
   {
      public void onAutoFocus(boolean success, Camera camera)
      {
         autoFocusHandler.postDelayed(doAutoFocus, 1000);
      }
   };
}
